{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 12"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "#读取数据\n",
    "train = np.genfromtxt('hw2_adaboost_train.dat')\n",
    "test = np.genfromtxt('hw2_adaboost_test.dat')\n",
    "#作图\n",
    "plt.scatter(train[:, 0][train[:, 2] == 1], train[:, 1][train[:, 2] == 1])\n",
    "plt.scatter(train[:, 0][train[:, 2] == -1], train[:, 1][train[:, 2] == -1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#按第一个下标排序\n",
    "train1 = np.array(sorted(train, key=lambda x:x[0]))\n",
    "\n",
    "#按第二个下标排序\n",
    "train2 = np.array(sorted(train, key=lambda x:x[1]))\n",
    "\n",
    "#获得theta\n",
    "x1 = train1[:, 0]\n",
    "theta1 = np.append(np.array(x1[0] - 0.1), (x1[:-1] + x1[1:])/2)\n",
    "theta1 = np.append(theta1, x1[-1] + 0.1)\n",
    "\n",
    "x2 = train1[:, 1]\n",
    "theta2 = np.append(np.array(x2[0]-0.1), (x2[:-1] + x2[1:])/2)\n",
    "theta2 = np.append(theta2, x2[-1]+0.1)\n",
    "\n",
    "#合并theta\n",
    "theta = np.c_[theta1, theta2]\n",
    "\n",
    "y = train[:, 2]\n",
    "X = train[:, :2]\n",
    "\n",
    "def decision_stump(X, y, U, theta):\n",
    "    \"\"\"\n",
    "    X为训练数据，y为标签，U为权重，theta为stump\n",
    "    \"\"\"\n",
    "    #向量化执行计算\n",
    "    n = theta.shape[0]\n",
    "    m = X.shape[0]\n",
    "    #将X复制按横轴n份\n",
    "    X = np.tile(X, (n, 1))\n",
    "    #s=1\n",
    "    y1 = np.sign(X - theta)\n",
    "    #s=-1\n",
    "    y2 = np.sign(X - theta) * (-1)\n",
    "    #计算加权错误\n",
    "    error1 = np.sum((y1!=y) * U, axis=1)\n",
    "    error2 = np.sum((y2!=y) * U, axis=1)\n",
    "    #计算最小错误对应的下标\n",
    "    i1 = np.argmin(error1)\n",
    "    i2 = np.argmin(error2)\n",
    "    #判断哪个误差更小\n",
    "    if error1[i1] < error2[i2]:\n",
    "        s = 1\n",
    "        index = i1\n",
    "        error = error1[i1] / m\n",
    "    else:\n",
    "        s = -1\n",
    "        index = i2\n",
    "        error = error2[i2] / m\n",
    "    return s, index, error\n",
    "\n",
    "def decision_stump_all(X, y, U, theta):\n",
    "    \"\"\"\n",
    "    对两个维度分别使用decision_stump，取误差较小的维度\n",
    "    \"\"\"\n",
    "    #维度1\n",
    "    X1 = X[:, 0]\n",
    "    theta1 = theta[:, 0].reshape(-1, 1)\n",
    "    s1, i1, e1 = decision_stump(X1, y, U, theta1)\n",
    "    \n",
    "    #维度2\n",
    "    X2 = X[:, 1]\n",
    "    theta2 = theta[:, 1].reshape(-1, 1)\n",
    "    s2, i2, e2 = decision_stump(X2, y, U, theta2)\n",
    "    \n",
    "    if(e1 < e2):\n",
    "        return e1, s1, 0, i1\n",
    "    else:\n",
    "        return e2, s2, 1, i2\n",
    "\n",
    "def Adaptive_Boosting(X, y, theta, T=300):\n",
    "    n = X.shape[0]\n",
    "    u = np.ones(n) / n\n",
    "\n",
    "    #记录需要的数据\n",
    "    Alpha = np.array([])\n",
    "    U = np.array([])\n",
    "    Epsilon = np.array([])\n",
    "    Ein = np.array([])\n",
    "    G = np.array([])\n",
    "\n",
    "    for t in range(T):\n",
    "        #计算当且最优的参数\n",
    "        ein, s, d, index = decision_stump_all(X, y, u, theta)\n",
    "        #计算误差\n",
    "        epsilon = u.dot((s * np.sign(X[:, d] - theta[:, d][index])) != y) / np.sum(u)\n",
    "        #计算系数\n",
    "        k = np.sqrt((1 - epsilon) / epsilon)\n",
    "        #找到错误的点\n",
    "        i1 = s * np.sign(X[:, d] - theta[:, d][index]) != y\n",
    "        #更新权重\n",
    "        u[i1] = u[i1] * k\n",
    "        #找到正确的点\n",
    "        i2 = s * np.sign(X[:, d] - theta[:, d][index]) == y\n",
    "        #更新权重\n",
    "        u[i2] = u[i2] / k\n",
    "        #更新alpha\n",
    "        alpha = np.log(k)\n",
    "        \n",
    "        #存储数据\n",
    "        Ein = np.r_[Ein, ein]\n",
    "        if(t == 0):\n",
    "            U = np.array([u])\n",
    "        else:\n",
    "            U = np.r_[U, np.array([u])]\n",
    "        Epsilon = np.r_[Epsilon, epsilon]\n",
    "        Alpha = np.r_[Alpha, alpha]\n",
    "        g = [[s, d, index]]\n",
    "\n",
    "        if(t == 0):\n",
    "            G = np.array(g)\n",
    "        else:\n",
    "            G = np.r_[G, np.array(g)]\n",
    "    return Ein, U, Epsilon, Alpha, G"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ein(g1) = 0.0024000000000000002 ,alpha1 = 0.5763397549691927\n"
     ]
    }
   ],
   "source": [
    "#训练数据\n",
    "T = 300\n",
    "Ein, U, Epsilon, Alpha, G = Adaptive_Boosting(X, y, theta, T=T)\n",
    "\n",
    "#problem 12\n",
    "t = np.arange(T)\n",
    "\n",
    "plt.plot(t, Ein)\n",
    "plt.title(\"$E_{in}(g_t)\\ VS\\ t$\")\n",
    "plt.show()\n",
    "print(\"Ein(g1) =\", Ein[0], \",alpha1 =\", Alpha[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 14"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ein(G) = 0.0\n"
     ]
    }
   ],
   "source": [
    "#problem 14\n",
    "def predict(X, y, G, Alpha, t, theta):\n",
    "    \"\"\"\n",
    "    利用前t个alpha, g计算Ein(Gt)\n",
    "    \"\"\"\n",
    "    \n",
    "    s = G[:t, 0]\n",
    "    d = G[:t, 1]\n",
    "    theta_ = G[:t, 2]\n",
    "    alpha = Alpha[:t]\n",
    "\n",
    "    result = []\n",
    "    for i in range(t):\n",
    "        s1 = s[i]\n",
    "        d1 = d[i]\n",
    "        t1 = theta_[i]\n",
    "        result.append(s1*np.sign(X[:, d1] - theta[:, d1][t1]))\n",
    "    r = alpha.dot(np.array(result))\n",
    "    \n",
    "    return np.mean(np.sign(r) != y)\n",
    "\n",
    "T = 300\n",
    "t = np.arange(T)\n",
    "G1 = [predict(X, y, G, Alpha, i, theta) for i in t]\n",
    "\n",
    "plt.plot(t, G1)\n",
    "plt.title(\"$G_t\\ VS\\ t$\")\n",
    "plt.show()\n",
    "\n",
    "print(\"Ein(G) =\", G1[-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 15"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "U2 = 0.6545039637744691 UT = 0.008596775074963087\n"
     ]
    }
   ],
   "source": [
    "#problem 15\n",
    "U1 = U.sum(axis=1)\n",
    "\n",
    "plt.plot(t, U1)\n",
    "plt.title('$U_t$ VS t')\n",
    "plt.show()\n",
    "\n",
    "print(\"U2 =\", U1[1], \"UT =\", U1[-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 16"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "minimun epsilon = 0.1787280701754386\n"
     ]
    }
   ],
   "source": [
    "#problem 16\n",
    "plt.plot(t, Epsilon)\n",
    "plt.title('$\\epsilon_t$ VS t')\n",
    "plt.show()\n",
    "\n",
    "print(\"minimun epsilon =\", np.min(Epsilon))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 17"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Eout(g1) = 0.29\n"
     ]
    }
   ],
   "source": [
    "#problem 17\n",
    "Xtest = test[:, :2]\n",
    "ytest = test[:, 2]\n",
    "#获得参数\n",
    "s = G[:, 0]\n",
    "d = G[:, 1]\n",
    "theta_ = G[:, 2]\n",
    "\n",
    "g = []\n",
    "for i in range(300):\n",
    "    s1 = s[i]\n",
    "    d1 = d[i]\n",
    "    t1 = theta_[i]\n",
    "    \n",
    "    g.append(np.mean(s1*np.sign(Xtest[:, d1] - theta[:, d1][t1]) != ytest))\n",
    "    \n",
    "plt.plot(t, g)\n",
    "plt.title('$E_{out}(g_1)$ VS t')\n",
    "plt.show()\n",
    "\n",
    "print(\"Eout(g1) =\", g[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 18"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ein(G) = 0.123\n"
     ]
    }
   ],
   "source": [
    "#problem 18\n",
    "t = np.arange(T)\n",
    "G2 = [predict(Xtest, ytest, G, Alpha, i, theta) for i in t]\n",
    "\n",
    "plt.plot(t, G2)\n",
    "plt.title(\"$G_t\\ VS\\ t$\")\n",
    "plt.show()\n",
    "\n",
    "print(\"Ein(G) =\", G2[-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 19"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "minimum Ein = 0.0\n",
      "gamma = 32\n",
      "lambda = 0.001\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.linalg import inv\n",
    "\n",
    "data = np.genfromtxt('hw2_lssvm_all.dat')\n",
    "\n",
    "#获得K\n",
    "def generateK(X1, X2, gamma):\n",
    "    \"\"\"\n",
    "    返回X1，X2\n",
    "    \"\"\"\n",
    "    d1 = np.sum(X1 ** 2, axis=1).reshape(-1, 1)\n",
    "    d2 = np.sum(X2 ** 2, axis=1).reshape(1, -1)\n",
    "    dist = d1 + d2 - 2 * X1.dot(X2.T)\n",
    "    K = np.exp(- gamma * dist)\n",
    "    \n",
    "    return K\n",
    "\n",
    "n = int(data.shape[0] * 0.8)\n",
    "m = data.shape[0] - n\n",
    "\n",
    "#划分测试集训练集\n",
    "trainx = data[:n,:][:, :-1]\n",
    "trainy = data[:n,:][:, -1]\n",
    "testx = data[n:,:][:, :-1]\n",
    "testy = data[n:,:][:, -1]\n",
    "\n",
    "#初始化参数\n",
    "Gamma = [32, 2, 0.125]\n",
    "Lambda = [0.001, 1, 1000]\n",
    "#记录最优解\n",
    "gammatrain = Gamma[0]\n",
    "lambdatrain = Lambda[0]\n",
    "gammatest = Gamma[0]\n",
    "lambdatest = Lambda[0]\n",
    "Ein = 1\n",
    "Eout = 1\n",
    "\n",
    "for i in Gamma:\n",
    "    #计算核矩阵\n",
    "    K = generateK(trainx, trainx, i)\n",
    "    K1 = generateK(testx, trainx, i)\n",
    "    for j in Lambda:\n",
    "        #计算beta\n",
    "        beta = inv(np.eye(n)*j + K).dot(trainy)\n",
    "        #计算预测结果\n",
    "        y1 = K.dot(beta)\n",
    "        y2 = K1.dot(beta)\n",
    "        ein = np.mean(np.sign(y1) != trainy)\n",
    "        eout = np.mean(np.sign(y2) != testy)\n",
    "        #更新最优解\n",
    "        if(ein < Ein):\n",
    "            Ein = ein\n",
    "            gammatrain = i\n",
    "            lambdatrain = j\n",
    "        if(eout < Eout):\n",
    "            Eout = eout\n",
    "            gammatest = i\n",
    "            lambdatest = j\n",
    "\n",
    "#### Problem 19\n",
    "print(\"minimum Ein =\", Ein)\n",
    "print(\"gamma =\", gammatrain)\n",
    "print(\"lambda =\", lambdatrain)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 20"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "minimum Eout = 0.39\n",
      "gamma = 0.125\n",
      "lambda = 1000\n"
     ]
    }
   ],
   "source": [
    "#### Problem 20\n",
    "print(\"minimum Eout =\", Eout)\n",
    "print(\"gamma =\", gammatest)\n",
    "print(\"lambda =\", lambdatest)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
